home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 7: Sunsite / Linux Cubed Series 7 - Sunsite Vol 1.iso / system / news / selectv1.tar / selectv1 / main.c < prev    next >
C/C++ Source or Header  |  1993-09-04  |  6KB  |  248 lines

  1. /*
  2. main.c: Main file for selectnews.
  3.         Provide easy interface for users to hone down their .newsrc file
  4.  
  5. Copyright (C) 1993 Eugene Eric Kim
  6. All rights reserved.
  7.  
  8. LAST REVISION: September 4, 1993
  9.  
  10. SHORTCOMINGS:
  11. -will only help edit what's in .newsrc; cannot
  12.  find new newsgroups not in .newsrc
  13. */
  14.  
  15. #include <stdio.h>
  16. #include "headers.h"
  17.  
  18. main()
  19. {
  20.   dllist sub;
  21.   dllist usub;
  22.   node* wsub;
  23.   node* wusub;
  24.   char* curschar = "->";
  25.   int ch, last1, last2, c, utop, stop, ucpos, scpos;
  26.   short QUIT = 0,LAST;
  27.  
  28.   /* initialize linked lists */
  29.   list_create(&sub);
  30.   list_create(&usub);
  31.  
  32.   /* sort contents of .newsrc */
  33.   sortfile(GetFile(),&sub,&usub,&last1,&last2);
  34.   wsub = list_start(sub);
  35.   wusub = list_start(usub);
  36.  
  37.   initwin();
  38.   scpos = ucpos = 0;
  39.   utop = stop = 0;
  40.   showbuffer(leftscr,usub,0);
  41.   showbuffer(rightscr,sub,0);
  42.   if (usub.head != 0) {
  43.     c = 0;
  44.     cursor(leftscr,ucpos,curschar);
  45.   }
  46.   else {
  47.     c = 1;
  48.     cursor(rightscr,scpos,curschar);
  49.   }
  50.  
  51.   do {
  52.     ch = getch();
  53.     switch (ch) {
  54.     case 'i': case 'I':
  55.       Instructions();
  56.       getch();
  57.       clear();
  58.       Topline();
  59.       Credits();
  60.       showbuffer(leftscr,usub,utop);
  61.       showbuffer(rightscr,sub,stop);
  62.       if (c) cursor(rightscr,scpos,curschar);
  63.       else cursor(leftscr,ucpos,curschar);      
  64.       break;
  65.     case ' ': case 'h': case 'H': case 'l': case 'L':
  66. #ifdef NCURSES
  67.     case KEY_LEFT: case KEY_RIGHT:
  68. #endif
  69.       if (c && (usub.head != 0)) {
  70.     delcursor(rightscr,scpos);
  71.     cursor(leftscr,ucpos,curschar);
  72.     c = 0;
  73.     wusub = list_position(usub,utop+ucpos);
  74.       }
  75.       else if (!c && (sub.head != 0)) {
  76.     delcursor(leftscr,ucpos);
  77.     cursor(rightscr,scpos,curschar);
  78.     c = 1;
  79.     wsub = list_position(sub,stop+scpos);
  80.       }
  81.       break;
  82.     case 'k': case 'K':
  83. #ifdef NCURSES
  84.     case KEY_UP:
  85. #endif
  86.       if (c)
  87.     wsub = moveup(rightscr,&scpos,&stop,wsub,curschar);
  88.       else
  89.     wusub = moveup(leftscr,&ucpos,&utop,wusub,curschar);
  90.       break;
  91.     case 'j': case 'J':
  92. #ifdef NCURSES
  93.     case KEY_DOWN:
  94. #endif
  95.       if (c)
  96.     wsub = movedown(rightscr,&scpos,&stop,sub,wsub,curschar);
  97.       else
  98.     wusub = movedown(leftscr,&ucpos,&utop,usub,wusub,curschar);
  99.       break;
  100.     case '>':
  101. #ifdef NCURSES
  102.     case KEY_NPAGE:
  103. #endif
  104.       if (c)
  105.     wsub = scrolldown(rightscr,&scpos,&stop,sub,wsub,curschar);
  106.       else
  107.     wusub = scrolldown(leftscr,&ucpos,&utop,usub,wusub,curschar);
  108.       break;
  109.     case '<':
  110. #ifdef NCURSES
  111.     case KEY_PPAGE:
  112. #endif
  113.       if (c)
  114.     wsub = scrollup(rightscr,&scpos,&stop,sub,wsub,curschar);
  115.       else
  116.     wusub = scrollup(leftscr,&ucpos,&utop,usub,wusub,curschar);
  117.       break;
  118.     case '0':
  119.       if (c)
  120.     wsub = homepage(rightscr,&scpos,&stop,sub,curschar);
  121.       else
  122.     wusub = homepage(leftscr,&ucpos,&utop,usub,curschar);
  123.       break;
  124.     case '$':
  125.       if (c)
  126.     wsub = endpage(rightscr,&scpos,&stop,sub,curschar);
  127.       else
  128.     wusub = endpage(leftscr,&ucpos,&utop,usub,curschar);
  129.       break;
  130.     case '\n':
  131.       if (c) {
  132.     LAST = list_last(wsub);
  133.     wusub = list_insafter(&usub,list_end(usub),(*wsub).entry);
  134.     wsub = list_del(&sub,wsub);
  135.     if (list_empty(sub)) {
  136.       c = 0;
  137.       wusub = list_position(usub,utop+ucpos);
  138.     }
  139.     else if (LAST) {
  140.       if ( (stop != 0) && (scpos == 0) ) {
  141.         if (stop - LINES - 2 >= 0)
  142.           stop -= LINES - 2;
  143.         else
  144.           stop = 0;
  145.         scpos = LINES - 3;
  146.       }
  147.       else if (scpos>0)
  148.         scpos--;
  149.     }
  150.     showbuffer(leftscr,usub,utop);
  151.     showbuffer(rightscr,sub,stop);
  152.     if (c) cursor(rightscr,scpos,curschar);
  153.     else cursor(leftscr,ucpos,curschar);
  154.       }
  155.       else {
  156.     LAST = list_last(wusub);
  157.     wsub = list_insafter(&sub,list_end(sub),(*wusub).entry);
  158.     wusub = list_del(&usub,wusub);
  159.     if (list_empty(usub)) {
  160.       c = 1;
  161.       wsub = list_position(sub,stop+scpos);
  162.     }
  163.     else if (LAST) {
  164.       if ( (utop != 0) && (ucpos == 0) ) {
  165.         if (utop - LINES - 2 >= 0)
  166.           utop -= LINES - 2;
  167.         else
  168.           utop = 0;
  169.         ucpos = LINES - 3;
  170.       }
  171.       else if (ucpos>0)
  172.         ucpos--;
  173.     }
  174.     showbuffer(leftscr,usub,utop);
  175.     showbuffer(rightscr,sub,stop);
  176.     if (c) cursor(rightscr,scpos,curschar);
  177.     else cursor(leftscr,ucpos,curschar);
  178.       }
  179.       break;
  180.     case 's': case 'S':
  181.       if (c && Sure("Sort subscribed (y/n)? "))
  182.     sort(rightscr,&sub,stop,scpos,curschar);
  183.       else if (!c && Sure("Sort unsubscribed (y/n)? "))
  184.     sort(leftscr,&usub,utop,ucpos,curschar);
  185.       break;
  186.     case 'g': case 'G':
  187.       if (c) {
  188.     if (Sure("Unsubscribe all (y/n)? ")) {
  189.       wsub = list_start(sub);
  190.       while (!list_empty(sub)) {
  191.         wusub = list_insafter(&usub,list_end(usub),(*wsub).entry);
  192.         wsub = list_del(&sub,wsub);
  193.       }
  194.       c = 0;
  195.       Credits();
  196.     }
  197.       }
  198.       else {
  199.     if (Sure("Subscribe all (y/n)? ")) {
  200.       wusub = list_start(usub);
  201.       while (!list_empty(usub)) {
  202.         wsub = list_insafter(&sub,list_end(sub),(*wusub).entry);
  203.         wusub = list_del(&usub,wusub);
  204.       }
  205.     }
  206.     c = 1;
  207.     Credits();
  208.       }
  209.       showbuffer(leftscr,usub,utop);
  210.       showbuffer(rightscr,sub,stop);
  211.       if (c) cursor(rightscr,scpos,curschar);
  212.       else cursor(leftscr,ucpos,curschar);
  213.       break;
  214.     case 'f': case 'F':
  215.       if (c)
  216.     wsub = find(rightscr,&scpos,&stop,sub,curschar);
  217.       else
  218.     wusub = find(leftscr,&ucpos,&utop,usub,curschar);
  219.       break;
  220.     case 'r': case 'R': case 12:
  221.       wrefresh(curscr);
  222.       break;
  223.     case 'q': case 'Q':
  224.       QUIT = Sure("Quit without saving (y/n)? ");
  225.       break;
  226.     case 'w': case 'W':
  227.       if (Sure("Write .newsrc and quit (y/n)? "))
  228.     QUIT = Write(sub,usub);
  229.       break;
  230.     default:
  231.       break;
  232.     }
  233.   } while (!QUIT);
  234.  
  235.   list_clear(&sub);
  236.   list_clear(&usub);
  237.  
  238.   standend();
  239.   clear();
  240.   mvaddstr(0,0,"selectnews");
  241.   mvaddstr(1,0,VERSION);
  242.   mvaddstr(2,0,"Copyright (C) 1993 Eugene Kim");
  243.   mvaddstr(3,0,"All rights reserved.");
  244.   mvaddstr(5,0,"Good-bye!\n");
  245.   refresh();
  246.   endwin();
  247. }
  248.